{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "parliamentary-greensboro",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "-- \u001b[1mAttaching packages\u001b[22m --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.3.1 --\n",
      "\n",
      "\u001b[32mv\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.3     \u001b[32mv\u001b[39m \u001b[34mpurrr  \u001b[39m 0.3.4\n",
      "\u001b[32mv\u001b[39m \u001b[34mtibble \u001b[39m 3.1.0     \u001b[32mv\u001b[39m \u001b[34mdplyr  \u001b[39m 1.0.5\n",
      "\u001b[32mv\u001b[39m \u001b[34mtidyr  \u001b[39m 1.1.3     \u001b[32mv\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n",
      "\u001b[32mv\u001b[39m \u001b[34mreadr  \u001b[39m 1.4.0     \u001b[32mv\u001b[39m \u001b[34mforcats\u001b[39m 0.5.1\n",
      "\n",
      "Warning message:\n",
      "\"package 'tidyr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'readr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'purrr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'dplyr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'stringr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'forcats' was built under R version 4.0.5\"\n",
      "-- \u001b[1mConflicts\u001b[22m ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ tidyverse_conflicts() --\n",
      "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n",
      "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m    masks \u001b[34mstats\u001b[39m::lag()\n",
      "\n",
      "Warning message:\n",
      "\"package 'Seurat' was built under R version 4.0.5\"\n",
      "Registered S3 method overwritten by 'spatstat.geom':\n",
      "  method     from\n",
      "  print.boxx cli \n",
      "\n",
      "Attaching SeuratObject\n",
      "\n",
      "Warning message:\n",
      "\"package 'ggpubr' was built under R version 4.0.5\"\n",
      "Warning message:\n",
      "\"package 'gridExtra' was built under R version 4.0.5\"\n",
      "\n",
      "Attaching package: 'gridExtra'\n",
      "\n",
      "\n",
      "The following object is masked from 'package:dplyr':\n",
      "\n",
      "    combine\n",
      "\n",
      "\n",
      "Warning message:\n",
      "\"package 'reshape2' was built under R version 4.0.5\"\n",
      "\n",
      "Attaching package: 'reshape2'\n",
      "\n",
      "\n",
      "The following object is masked from 'package:tidyr':\n",
      "\n",
      "    smiths\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "library(tidyverse)\n",
    "library(Seurat)\n",
    "library(ggpubr)\n",
    "library(gridExtra)\n",
    "library(reshape2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "therapeutic-public",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "An object of class Seurat \n",
       "32738 features across 2700 samples within 1 assay \n",
       "Active assay: RNA (32738 features, 2000 variable features)\n",
       " 2 dimensional reductions calculated: pca, tsne"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pbmc <- readRDS(\"./data/pbmc_processed.rds\")\n",
    "pbmc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "rental-practitioner",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Formal class 'Seurat' [package \"SeuratObject\"] with 13 slots\n",
      "  ..@ assays      :List of 1\n",
      "  .. ..$ RNA:Formal class 'Assay' [package \"Seurat\"] with 8 slots\n",
      "  .. .. .. ..@ counts       :Formal class 'dgCMatrix' [package \"Matrix\"] with 6 slots\n",
      "  .. .. .. .. .. ..@ i       : int [1:2286884] 70 166 178 326 363 410 412 492 494 495 ...\n",
      "  .. .. .. .. .. ..@ p       : int [1:2701] 0 781 2133 3264 4224 4746 5528 6311 7101 7634 ...\n",
      "  .. .. .. .. .. ..@ Dim     : int [1:2] 32738 2700\n",
      "  .. .. .. .. .. ..@ Dimnames:List of 2\n",
      "  .. .. .. .. .. .. ..$ : chr [1:32738] \"MIR1302-10\" \"FAM138A\" \"OR4F5\" \"RP11-34P13.7\" ...\n",
      "  .. .. .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. .. ..@ x       : num [1:2286884] 1 1 2 1 1 1 1 41 1 1 ...\n",
      "  .. .. .. .. .. ..@ factors : list()\n",
      "  .. .. .. ..@ data         :Formal class 'dgCMatrix' [package \"Matrix\"] with 6 slots\n",
      "  .. .. .. .. .. ..@ i       : int [1:2286884] 70 166 178 326 363 410 412 492 494 495 ...\n",
      "  .. .. .. .. .. ..@ p       : int [1:2701] 0 781 2133 3264 4224 4746 5528 6311 7101 7634 ...\n",
      "  .. .. .. .. .. ..@ Dim     : int [1:2] 32738 2700\n",
      "  .. .. .. .. .. ..@ Dimnames:List of 2\n",
      "  .. .. .. .. .. .. ..$ : chr [1:32738] \"MIR1302-10\" \"FAM138A\" \"OR4F5\" \"RP11-34P13.7\" ...\n",
      "  .. .. .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. .. ..@ x       : num [1:2286884] 1.64 1.64 2.23 1.64 1.64 ...\n",
      "  .. .. .. .. .. ..@ factors : list()\n",
      "  .. .. .. ..@ scale.data   : num [1:2000, 1:2700] -0.833 -0.273 1.522 -0.051 -0.461 ...\n",
      "  .. .. .. .. ..- attr(*, \"dimnames\")=List of 2\n",
      "  .. .. .. .. .. ..$ : chr [1:2000] \"ISG15\" \"CPSF3L\" \"MRPL20\" \"ATAD3C\" ...\n",
      "  .. .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. ..@ key          : chr \"rna_\"\n",
      "  .. .. .. ..@ assay.orig   : NULL\n",
      "  .. .. .. ..@ var.features : chr [1:2000] \"PPBP\" \"LYZ\" \"S100A9\" \"IGLL5\" ...\n",
      "  .. .. .. ..@ meta.features:'data.frame':\t32738 obs. of  5 variables:\n",
      "  .. .. .. .. ..$ vst.mean                 : num [1:32738] 0 0 0 0 0 ...\n",
      "  .. .. .. .. ..$ vst.variance             : num [1:32738] 0 0 0 0 0 ...\n",
      "  .. .. .. .. ..$ vst.variance.expected    : num [1:32738] 0 0 0 0 0 ...\n",
      "  .. .. .. .. ..$ vst.variance.standardized: num [1:32738] 0 0 0 0 0 ...\n",
      "  .. .. .. .. ..$ vst.variable             : logi [1:32738] FALSE FALSE FALSE FALSE FALSE FALSE ...\n",
      "  .. .. .. ..@ misc         : NULL\n",
      "  ..@ meta.data   :'data.frame':\t2700 obs. of  6 variables:\n",
      "  .. ..$ orig.ident     : Factor w/ 1 level \"SeuratProject\": 1 1 1 1 1 1 1 1 1 1 ...\n",
      "  .. ..$ nCount_RNA     : num [1:2700] 2421 4903 3149 2639 981 ...\n",
      "  .. ..$ nFeature_RNA   : int [1:2700] 781 1352 1131 960 522 782 783 790 533 550 ...\n",
      "  .. ..$ RNA_snn_res.0.8: Factor w/ 11 levels \"0\",\"1\",\"2\",\"3\",..: 2 3 2 8 9 1 4 4 7 8 ...\n",
      "  .. ..$ seurat_clusters: Factor w/ 11 levels \"0\",\"1\",\"2\",\"3\",..: 2 3 2 8 9 1 4 4 7 8 ...\n",
      "  .. ..$ percent.mt     : num [1:2700] 3.015 3.794 0.889 1.743 1.223 ...\n",
      "  ..@ active.assay: chr \"RNA\"\n",
      "  ..@ active.ident: Factor w/ 11 levels \"0\",\"1\",\"2\",\"3\",..: 2 3 2 8 9 1 4 4 7 8 ...\n",
      "  .. ..- attr(*, \"names\")= chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  ..@ graphs      :List of 2\n",
      "  .. ..$ RNA_nn :Formal class 'Graph' [package \"Seurat\"] with 7 slots\n",
      "  .. .. .. ..@ assay.used: chr \"RNA\"\n",
      "  .. .. .. ..@ i         : int [1:54000] 0 739 1223 1537 1538 1740 1789 2324 2352 2511 ...\n",
      "  .. .. .. ..@ p         : int [1:2701] 0 10 26 48 72 83 88 122 146 157 ...\n",
      "  .. .. .. ..@ Dim       : int [1:2] 2700 2700\n",
      "  .. .. .. ..@ Dimnames  :List of 2\n",
      "  .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. ..@ x         : num [1:54000] 1 1 1 1 1 1 1 1 1 1 ...\n",
      "  .. .. .. ..@ factors   : list()\n",
      "  .. ..$ RNA_snn:Formal class 'Graph' [package \"Seurat\"] with 7 slots\n",
      "  .. .. .. ..@ assay.used: chr \"RNA\"\n",
      "  .. .. .. ..@ i         : int [1:199218] 0 47 105 237 301 389 424 434 524 530 ...\n",
      "  .. .. .. ..@ p         : int [1:2701] 0 63 118 169 227 274 320 423 489 528 ...\n",
      "  .. .. .. ..@ Dim       : int [1:2] 2700 2700\n",
      "  .. .. .. ..@ Dimnames  :List of 2\n",
      "  .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. ..@ x         : num [1:199218] 1 0.111 0.176 0.111 0.111 ...\n",
      "  .. .. .. ..@ factors   : list()\n",
      "  ..@ neighbors   : list()\n",
      "  ..@ reductions  :List of 2\n",
      "  .. ..$ pca :Formal class 'DimReduc' [package \"Seurat\"] with 9 slots\n",
      "  .. .. .. ..@ cell.embeddings           : num [1:2700, 1:50] -4.605 -0.251 -2.726 11.797 -3.228 ...\n",
      "  .. .. .. .. ..- attr(*, \"dimnames\")=List of 2\n",
      "  .. .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. .. ..$ : chr [1:50] \"PC_1\" \"PC_2\" \"PC_3\" \"PC_4\" ...\n",
      "  .. .. .. ..@ feature.loadings          : num [1:2000, 1:50] 0.01157 0.12027 0.11944 -0.00867 -0.01555 ...\n",
      "  .. .. .. .. ..- attr(*, \"dimnames\")=List of 2\n",
      "  .. .. .. .. .. ..$ : chr [1:2000] \"PPBP\" \"LYZ\" \"S100A9\" \"IGLL5\" ...\n",
      "  .. .. .. .. .. ..$ : chr [1:50] \"PC_1\" \"PC_2\" \"PC_3\" \"PC_4\" ...\n",
      "  .. .. .. ..@ feature.loadings.projected: num[0 , 0 ] \n",
      "  .. .. .. ..@ assay.used                : chr \"RNA\"\n",
      "  .. .. .. ..@ global                    : logi FALSE\n",
      "  .. .. .. ..@ stdev                     : num [1:50] 6.84 4.43 3.83 3.7 3.2 ...\n",
      "  .. .. .. ..@ key                       : chr \"PC_\"\n",
      "  .. .. .. ..@ jackstraw                 :Formal class 'JackStrawData' [package \"Seurat\"] with 4 slots\n",
      "  .. .. .. .. .. ..@ empirical.p.values     : num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ fake.reduction.scores  : num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ empirical.p.values.full: num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ overall.p.values       : num[0 , 0 ] \n",
      "  .. .. .. ..@ misc                      :List of 1\n",
      "  .. .. .. .. ..$ total.variance: num 1704\n",
      "  .. ..$ tsne:Formal class 'DimReduc' [package \"Seurat\"] with 9 slots\n",
      "  .. .. .. ..@ cell.embeddings           : num [1:2700, 1:2] 5.64 -29.31 3.36 -5.43 33.85 ...\n",
      "  .. .. .. .. ..- attr(*, \"dimnames\")=List of 2\n",
      "  .. .. .. .. .. ..$ : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. .. ..$ : chr [1:2] \"tSNE_1\" \"tSNE_2\"\n",
      "  .. .. .. ..@ feature.loadings          : num[0 , 0 ] \n",
      "  .. .. .. ..@ feature.loadings.projected: num[0 , 0 ] \n",
      "  .. .. .. ..@ assay.used                : chr \"RNA\"\n",
      "  .. .. .. ..@ global                    : logi TRUE\n",
      "  .. .. .. ..@ stdev                     : num(0) \n",
      "  .. .. .. ..@ key                       : chr \"tSNE_\"\n",
      "  .. .. .. ..@ jackstraw                 :Formal class 'JackStrawData' [package \"Seurat\"] with 4 slots\n",
      "  .. .. .. .. .. ..@ empirical.p.values     : num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ fake.reduction.scores  : num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ empirical.p.values.full: num[0 , 0 ] \n",
      "  .. .. .. .. .. ..@ overall.p.values       : num[0 , 0 ] \n",
      "  .. .. .. ..@ misc                      : list()\n",
      "  ..@ images      : list()\n",
      "  ..@ project.name: chr \"SeuratProject\"\n",
      "  ..@ misc        : list()\n",
      "  ..@ version     :Classes 'package_version', 'numeric_version'  hidden list of 1\n",
      "  .. ..$ : int [1:3] 3 2 3\n",
      "  ..@ commands    :List of 7\n",
      "  .. ..$ NormalizeData.RNA       :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"NormalizeData.RNA\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:07:50\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"NormalizeData(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 5\n",
      "  .. .. .. .. ..$ assay               : chr \"RNA\"\n",
      "  .. .. .. .. ..$ normalization.method: chr \"LogNormalize\"\n",
      "  .. .. .. .. ..$ scale.factor        : num 10000\n",
      "  .. .. .. .. ..$ margin              : num 1\n",
      "  .. .. .. .. ..$ verbose             : logi TRUE\n",
      "  .. ..$ FindVariableFeatures.RNA:Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"FindVariableFeatures.RNA\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:07:55\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"FindVariableFeatures(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 12\n",
      "  .. .. .. .. ..$ assay              : chr \"RNA\"\n",
      "  .. .. .. .. ..$ selection.method   : chr \"vst\"\n",
      "  .. .. .. .. ..$ loess.span         : num 0.3\n",
      "  .. .. .. .. ..$ clip.max           : chr \"auto\"\n",
      "  .. .. .. .. ..$ mean.function      :function (mat, display_progress)  \n",
      "  .. .. .. .. ..$ dispersion.function:function (mat, display_progress)  \n",
      "  .. .. .. .. ..$ num.bin            : num 20\n",
      "  .. .. .. .. ..$ binning.method     : chr \"equal_width\"\n",
      "  .. .. .. .. ..$ nfeatures          : num 2000\n",
      "  .. .. .. .. ..$ mean.cutoff        : num [1:2] 0.1 8\n",
      "  .. .. .. .. ..$ dispersion.cutoff  : num [1:2] 1 Inf\n",
      "  .. .. .. .. ..$ verbose            : logi TRUE\n",
      "  .. ..$ ScaleData.RNA           :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"ScaleData.RNA\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:07:55\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"ScaleData(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 10\n",
      "  .. .. .. .. ..$ features          : chr [1:2000] \"PPBP\" \"LYZ\" \"S100A9\" \"IGLL5\" ...\n",
      "  .. .. .. .. ..$ assay             : chr \"RNA\"\n",
      "  .. .. .. .. ..$ model.use         : chr \"linear\"\n",
      "  .. .. .. .. ..$ use.umi           : logi FALSE\n",
      "  .. .. .. .. ..$ do.scale          : logi TRUE\n",
      "  .. .. .. .. ..$ do.center         : logi TRUE\n",
      "  .. .. .. .. ..$ scale.max         : num 10\n",
      "  .. .. .. .. ..$ block.size        : num 1000\n",
      "  .. .. .. .. ..$ min.cells.to.block: num 2700\n",
      "  .. .. .. .. ..$ verbose           : logi TRUE\n",
      "  .. ..$ RunPCA.RNA              :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"RunPCA.RNA\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:08:08\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"RunPCA(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 10\n",
      "  .. .. .. .. ..$ assay          : chr \"RNA\"\n",
      "  .. .. .. .. ..$ npcs           : num 50\n",
      "  .. .. .. .. ..$ rev.pca        : logi FALSE\n",
      "  .. .. .. .. ..$ weight.by.var  : logi TRUE\n",
      "  .. .. .. .. ..$ verbose        : logi TRUE\n",
      "  .. .. .. .. ..$ ndims.print    : int [1:5] 1 2 3 4 5\n",
      "  .. .. .. .. ..$ nfeatures.print: num 30\n",
      "  .. .. .. .. ..$ reduction.name : chr \"pca\"\n",
      "  .. .. .. .. ..$ reduction.key  : chr \"PC_\"\n",
      "  .. .. .. .. ..$ seed.use       : num 42\n",
      "  .. ..$ FindNeighbors.RNA.pca   :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"FindNeighbors.RNA.pca\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:08:12\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"FindNeighbors(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 13\n",
      "  .. .. .. .. ..$ reduction   : chr \"pca\"\n",
      "  .. .. .. .. ..$ dims        : int [1:10] 1 2 3 4 5 6 7 8 9 10\n",
      "  .. .. .. .. ..$ assay       : chr \"RNA\"\n",
      "  .. .. .. .. ..$ k.param     : num 20\n",
      "  .. .. .. .. ..$ compute.SNN : logi TRUE\n",
      "  .. .. .. .. ..$ prune.SNN   : num 0.0667\n",
      "  .. .. .. .. ..$ nn.method   : chr \"rann\"\n",
      "  .. .. .. .. ..$ annoy.metric: chr \"euclidean\"\n",
      "  .. .. .. .. ..$ nn.eps      : num 0\n",
      "  .. .. .. .. ..$ verbose     : logi TRUE\n",
      "  .. .. .. .. ..$ force.recalc: logi FALSE\n",
      "  .. .. .. .. ..$ do.plot     : logi FALSE\n",
      "  .. .. .. .. ..$ graph.name  : chr [1:2] \"RNA_nn\" \"RNA_snn\"\n",
      "  .. ..$ FindClusters            :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"FindClusters\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:08:14\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"FindClusters(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 10\n",
      "  .. .. .. .. ..$ graph.name      : chr \"RNA_snn\"\n",
      "  .. .. .. .. ..$ modularity.fxn  : num 1\n",
      "  .. .. .. .. ..$ resolution      : num 0.8\n",
      "  .. .. .. .. ..$ method          : chr \"matrix\"\n",
      "  .. .. .. .. ..$ algorithm       : num 1\n",
      "  .. .. .. .. ..$ n.start         : num 10\n",
      "  .. .. .. .. ..$ n.iter          : num 10\n",
      "  .. .. .. .. ..$ random.seed     : num 0\n",
      "  .. .. .. .. ..$ group.singletons: logi TRUE\n",
      "  .. .. .. .. ..$ verbose         : logi TRUE\n",
      "  .. ..$ RunTSNE                 :Formal class 'SeuratCommand' [package \"Seurat\"] with 5 slots\n",
      "  .. .. .. ..@ name       : chr \"RunTSNE\"\n",
      "  .. .. .. ..@ time.stamp : POSIXct[1:1], format: \"2021-04-19 22:08:21\"\n",
      "  .. .. .. ..@ assay.used : chr \"RNA\"\n",
      "  .. .. .. ..@ call.string: chr \"RunTSNE(object = pbmc)\"\n",
      "  .. .. .. ..@ params     :List of 8\n",
      "  .. .. .. .. ..$ reduction     : chr \"pca\"\n",
      "  .. .. .. .. ..$ cells         : chr [1:2700] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\" ...\n",
      "  .. .. .. .. ..$ dims          : int [1:5] 1 2 3 4 5\n",
      "  .. .. .. .. ..$ seed.use      : num 1\n",
      "  .. .. .. .. ..$ tsne.method   : chr \"Rtsne\"\n",
      "  .. .. .. .. ..$ dim.embed     : num 2\n",
      "  .. .. .. .. ..$ reduction.name: chr \"tsne\"\n",
      "  .. .. .. .. ..$ reduction.key : chr \"tSNE_\"\n",
      "  ..@ tools       : list()\n"
     ]
    }
   ],
   "source": [
    "str(pbmc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "precise-penny",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"dataframe\">\n",
       "<caption>A data.frame: 6 × 5</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>orig.ident</th><th scope=col>nCount_RNA</th><th scope=col>nFeature_RNA</th><th scope=col>RNA_snn_res.0.8</th><th scope=col>seurat_clusters</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;int&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;fct&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>AAACATACAACCAC-1</th><td>SeuratProject</td><td>2421</td><td> 781</td><td>1</td><td>1</td></tr>\n",
       "\t<tr><th scope=row>AAACATTGAGCTAC-1</th><td>SeuratProject</td><td>4903</td><td>1352</td><td>2</td><td>2</td></tr>\n",
       "\t<tr><th scope=row>AAACATTGATCAGC-1</th><td>SeuratProject</td><td>3149</td><td>1131</td><td>1</td><td>1</td></tr>\n",
       "\t<tr><th scope=row>AAACCGTGCTTCCG-1</th><td>SeuratProject</td><td>2639</td><td> 960</td><td>7</td><td>7</td></tr>\n",
       "\t<tr><th scope=row>AAACCGTGTATGCG-1</th><td>SeuratProject</td><td> 981</td><td> 522</td><td>8</td><td>8</td></tr>\n",
       "\t<tr><th scope=row>AAACGCACTGGTAC-1</th><td>SeuratProject</td><td>2164</td><td> 782</td><td>0</td><td>0</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 5\n",
       "\\begin{tabular}{r|lllll}\n",
       "  & orig.ident & nCount\\_RNA & nFeature\\_RNA & RNA\\_snn\\_res.0.8 & seurat\\_clusters\\\\\n",
       "  & <fct> & <dbl> & <int> & <fct> & <fct>\\\\\n",
       "\\hline\n",
       "\tAAACATACAACCAC-1 & SeuratProject & 2421 &  781 & 1 & 1\\\\\n",
       "\tAAACATTGAGCTAC-1 & SeuratProject & 4903 & 1352 & 2 & 2\\\\\n",
       "\tAAACATTGATCAGC-1 & SeuratProject & 3149 & 1131 & 1 & 1\\\\\n",
       "\tAAACCGTGCTTCCG-1 & SeuratProject & 2639 &  960 & 7 & 7\\\\\n",
       "\tAAACCGTGTATGCG-1 & SeuratProject &  981 &  522 & 8 & 8\\\\\n",
       "\tAAACGCACTGGTAC-1 & SeuratProject & 2164 &  782 & 0 & 0\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 5\n",
       "\n",
       "| <!--/--> | orig.ident &lt;fct&gt; | nCount_RNA &lt;dbl&gt; | nFeature_RNA &lt;int&gt; | RNA_snn_res.0.8 &lt;fct&gt; | seurat_clusters &lt;fct&gt; |\n",
       "|---|---|---|---|---|---|\n",
       "| AAACATACAACCAC-1 | SeuratProject | 2421 |  781 | 1 | 1 |\n",
       "| AAACATTGAGCTAC-1 | SeuratProject | 4903 | 1352 | 2 | 2 |\n",
       "| AAACATTGATCAGC-1 | SeuratProject | 3149 | 1131 | 1 | 1 |\n",
       "| AAACCGTGCTTCCG-1 | SeuratProject | 2639 |  960 | 7 | 7 |\n",
       "| AAACCGTGTATGCG-1 | SeuratProject |  981 |  522 | 8 | 8 |\n",
       "| AAACGCACTGGTAC-1 | SeuratProject | 2164 |  782 | 0 | 0 |\n",
       "\n"
      ],
      "text/plain": [
       "                 orig.ident    nCount_RNA nFeature_RNA RNA_snn_res.0.8\n",
       "AAACATACAACCAC-1 SeuratProject 2421        781         1              \n",
       "AAACATTGAGCTAC-1 SeuratProject 4903       1352         2              \n",
       "AAACATTGATCAGC-1 SeuratProject 3149       1131         1              \n",
       "AAACCGTGCTTCCG-1 SeuratProject 2639        960         7              \n",
       "AAACCGTGTATGCG-1 SeuratProject  981        522         8              \n",
       "AAACGCACTGGTAC-1 SeuratProject 2164        782         0              \n",
       "                 seurat_clusters\n",
       "AAACATACAACCAC-1 1              \n",
       "AAACATTGAGCTAC-1 2              \n",
       "AAACATTGATCAGC-1 1              \n",
       "AAACCGTGCTTCCG-1 7              \n",
       "AAACCGTGTATGCG-1 8              \n",
       "AAACGCACTGGTAC-1 0              "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# alternative way to get meta data: pbmc[[]]\n",
    "head(pbmc@meta.data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "frozen-spine",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "2000"
      ],
      "text/latex": [
       "2000"
      ],
      "text/markdown": [
       "2000"
      ],
      "text/plain": [
       "[1] 2000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<style>\n",
       ".list-inline {list-style: none; margin:0; padding: 0}\n",
       ".list-inline>li {display: inline-block}\n",
       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
       "</style>\n",
       "<ol class=list-inline><li>'AAACATACAACCAC-1'</li><li>'AAACATTGAGCTAC-1'</li><li>'AAACATTGATCAGC-1'</li><li>'AAACCGTGCTTCCG-1'</li><li>'AAACCGTGTATGCG-1'</li></ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 'AAACATACAACCAC-1'\n",
       "\\item 'AAACATTGAGCTAC-1'\n",
       "\\item 'AAACATTGATCAGC-1'\n",
       "\\item 'AAACCGTGCTTCCG-1'\n",
       "\\item 'AAACCGTGTATGCG-1'\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 'AAACATACAACCAC-1'\n",
       "2. 'AAACATTGAGCTAC-1'\n",
       "3. 'AAACATTGATCAGC-1'\n",
       "4. 'AAACCGTGCTTCCG-1'\n",
       "5. 'AAACCGTGTATGCG-1'\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "[1] \"AAACATACAACCAC-1\" \"AAACATTGAGCTAC-1\" \"AAACATTGATCAGC-1\" \"AAACCGTGCTTCCG-1\"\n",
       "[5] \"AAACCGTGTATGCG-1\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "2700"
      ],
      "text/latex": [
       "2700"
      ],
      "text/markdown": [
       "2700"
      ],
      "text/plain": [
       "[1] 2700"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<style>\n",
       ".list-inline {list-style: none; margin:0; padding: 0}\n",
       ".list-inline>li {display: inline-block}\n",
       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
       "</style>\n",
       "<ol class=list-inline><li>'MIR1302-10'</li><li>'FAM138A'</li><li>'OR4F5'</li><li>'RP11-34P13.7'</li><li>'RP11-34P13.8'</li></ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 'MIR1302-10'\n",
       "\\item 'FAM138A'\n",
       "\\item 'OR4F5'\n",
       "\\item 'RP11-34P13.7'\n",
       "\\item 'RP11-34P13.8'\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 'MIR1302-10'\n",
       "2. 'FAM138A'\n",
       "3. 'OR4F5'\n",
       "4. 'RP11-34P13.7'\n",
       "5. 'RP11-34P13.8'\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "[1] \"MIR1302-10\"   \"FAM138A\"      \"OR4F5\"        \"RP11-34P13.7\" \"RP11-34P13.8\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "32738"
      ],
      "text/latex": [
       "32738"
      ],
      "text/markdown": [
       "32738"
      ],
      "text/plain": [
       "[1] 32738"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# highly variable genes\n",
    "length(rownames(pbmc@assays$RNA@meta.features)[pbmc@assays$RNA@meta.features$vst.variable])\n",
    "# cell names\n",
    "Cells(pbmc)[1:5]\n",
    "ncol(pbmc)\n",
    "# features\n",
    "rownames(pbmc)[1:5]\n",
    "nrow(pbmc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "narrative-investigator",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       ".list-inline {list-style: none; margin:0; padding: 0}\n",
       ".list-inline>li {display: inline-block}\n",
       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
       "</style>\n",
       "<ol class=list-inline><li>'MT-ND1'</li><li>'MT-ND2'</li><li>'MT-CO1'</li><li>'MT-CO2'</li><li>'MT-ATP8'</li><li>'MT-ATP6'</li><li>'MT-CO3'</li><li>'MT-ND3'</li><li>'MT-ND4L'</li><li>'MT-ND4'</li><li>'MT-ND5'</li><li>'MT-ND6'</li><li>'MT-CYB'</li></ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 'MT-ND1'\n",
       "\\item 'MT-ND2'\n",
       "\\item 'MT-CO1'\n",
       "\\item 'MT-CO2'\n",
       "\\item 'MT-ATP8'\n",
       "\\item 'MT-ATP6'\n",
       "\\item 'MT-CO3'\n",
       "\\item 'MT-ND3'\n",
       "\\item 'MT-ND4L'\n",
       "\\item 'MT-ND4'\n",
       "\\item 'MT-ND5'\n",
       "\\item 'MT-ND6'\n",
       "\\item 'MT-CYB'\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 'MT-ND1'\n",
       "2. 'MT-ND2'\n",
       "3. 'MT-CO1'\n",
       "4. 'MT-CO2'\n",
       "5. 'MT-ATP8'\n",
       "6. 'MT-ATP6'\n",
       "7. 'MT-CO3'\n",
       "8. 'MT-ND3'\n",
       "9. 'MT-ND4L'\n",
       "10. 'MT-ND4'\n",
       "11. 'MT-ND5'\n",
       "12. 'MT-ND6'\n",
       "13. 'MT-CYB'\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       " [1] \"MT-ND1\"  \"MT-ND2\"  \"MT-CO1\"  \"MT-CO2\"  \"MT-ATP8\" \"MT-ATP6\" \"MT-CO3\" \n",
       " [8] \"MT-ND3\"  \"MT-ND4L\" \"MT-ND4\"  \"MT-ND5\"  \"MT-ND6\"  \"MT-CYB\" "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## recurrent PercentageFeatureSet()\n",
    "mt_genes <- rownames(pbmc)[grepl(\"^MT-\",rownames(pbmc))]\n",
    "mt_genes\n",
    "counts <- GetAssayData(pbmc,\"counts\") \n",
    "mt_order <- rownames(pbmc) %in% mt_genes\n",
    "pbmc[[\"percent.mt_manul\"]] <- apply(counts,2,function(col) {sum(col[mt_order])/sum(col)*100})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "premier-medication",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"dataframe\">\n",
       "<caption>A data.frame: 6 × 7</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>orig.ident</th><th scope=col>nCount_RNA</th><th scope=col>nFeature_RNA</th><th scope=col>RNA_snn_res.0.8</th><th scope=col>seurat_clusters</th><th scope=col>percent.mt</th><th scope=col>percent.mt_manul</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;int&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>AAACATACAACCAC-1</th><td>SeuratProject</td><td>2421</td><td> 781</td><td>1</td><td>1</td><td>3.0152829</td><td>3.0152829</td></tr>\n",
       "\t<tr><th scope=row>AAACATTGAGCTAC-1</th><td>SeuratProject</td><td>4903</td><td>1352</td><td>2</td><td>2</td><td>3.7935958</td><td>3.7935958</td></tr>\n",
       "\t<tr><th scope=row>AAACATTGATCAGC-1</th><td>SeuratProject</td><td>3149</td><td>1131</td><td>1</td><td>1</td><td>0.8891712</td><td>0.8891712</td></tr>\n",
       "\t<tr><th scope=row>AAACCGTGCTTCCG-1</th><td>SeuratProject</td><td>2639</td><td> 960</td><td>7</td><td>7</td><td>1.7430845</td><td>1.7430845</td></tr>\n",
       "\t<tr><th scope=row>AAACCGTGTATGCG-1</th><td>SeuratProject</td><td> 981</td><td> 522</td><td>8</td><td>8</td><td>1.2232416</td><td>1.2232416</td></tr>\n",
       "\t<tr><th scope=row>AAACGCACTGGTAC-1</th><td>SeuratProject</td><td>2164</td><td> 782</td><td>0</td><td>0</td><td>1.6635860</td><td>1.6635860</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 7\n",
       "\\begin{tabular}{r|lllllll}\n",
       "  & orig.ident & nCount\\_RNA & nFeature\\_RNA & RNA\\_snn\\_res.0.8 & seurat\\_clusters & percent.mt & percent.mt\\_manul\\\\\n",
       "  & <fct> & <dbl> & <int> & <fct> & <fct> & <dbl> & <dbl>\\\\\n",
       "\\hline\n",
       "\tAAACATACAACCAC-1 & SeuratProject & 2421 &  781 & 1 & 1 & 3.0152829 & 3.0152829\\\\\n",
       "\tAAACATTGAGCTAC-1 & SeuratProject & 4903 & 1352 & 2 & 2 & 3.7935958 & 3.7935958\\\\\n",
       "\tAAACATTGATCAGC-1 & SeuratProject & 3149 & 1131 & 1 & 1 & 0.8891712 & 0.8891712\\\\\n",
       "\tAAACCGTGCTTCCG-1 & SeuratProject & 2639 &  960 & 7 & 7 & 1.7430845 & 1.7430845\\\\\n",
       "\tAAACCGTGTATGCG-1 & SeuratProject &  981 &  522 & 8 & 8 & 1.2232416 & 1.2232416\\\\\n",
       "\tAAACGCACTGGTAC-1 & SeuratProject & 2164 &  782 & 0 & 0 & 1.6635860 & 1.6635860\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 7\n",
       "\n",
       "| <!--/--> | orig.ident &lt;fct&gt; | nCount_RNA &lt;dbl&gt; | nFeature_RNA &lt;int&gt; | RNA_snn_res.0.8 &lt;fct&gt; | seurat_clusters &lt;fct&gt; | percent.mt &lt;dbl&gt; | percent.mt_manul &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|---|---|\n",
       "| AAACATACAACCAC-1 | SeuratProject | 2421 |  781 | 1 | 1 | 3.0152829 | 3.0152829 |\n",
       "| AAACATTGAGCTAC-1 | SeuratProject | 4903 | 1352 | 2 | 2 | 3.7935958 | 3.7935958 |\n",
       "| AAACATTGATCAGC-1 | SeuratProject | 3149 | 1131 | 1 | 1 | 0.8891712 | 0.8891712 |\n",
       "| AAACCGTGCTTCCG-1 | SeuratProject | 2639 |  960 | 7 | 7 | 1.7430845 | 1.7430845 |\n",
       "| AAACCGTGTATGCG-1 | SeuratProject |  981 |  522 | 8 | 8 | 1.2232416 | 1.2232416 |\n",
       "| AAACGCACTGGTAC-1 | SeuratProject | 2164 |  782 | 0 | 0 | 1.6635860 | 1.6635860 |\n",
       "\n"
      ],
      "text/plain": [
       "                 orig.ident    nCount_RNA nFeature_RNA RNA_snn_res.0.8\n",
       "AAACATACAACCAC-1 SeuratProject 2421        781         1              \n",
       "AAACATTGAGCTAC-1 SeuratProject 4903       1352         2              \n",
       "AAACATTGATCAGC-1 SeuratProject 3149       1131         1              \n",
       "AAACCGTGCTTCCG-1 SeuratProject 2639        960         7              \n",
       "AAACCGTGTATGCG-1 SeuratProject  981        522         8              \n",
       "AAACGCACTGGTAC-1 SeuratProject 2164        782         0              \n",
       "                 seurat_clusters percent.mt percent.mt_manul\n",
       "AAACATACAACCAC-1 1               3.0152829  3.0152829       \n",
       "AAACATTGAGCTAC-1 2               3.7935958  3.7935958       \n",
       "AAACATTGATCAGC-1 1               0.8891712  0.8891712       \n",
       "AAACCGTGCTTCCG-1 7               1.7430845  1.7430845       \n",
       "AAACCGTGTATGCG-1 8               1.2232416  1.2232416       \n",
       "AAACGCACTGGTAC-1 0               1.6635860  1.6635860       "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## check result\n",
    "# PercentageFeatureSet(\n",
    "#   object,\n",
    "#   pattern = NULL,\n",
    "#   features = NULL,\n",
    "#   col.name = NULL,\n",
    "#   assay = NULL\n",
    "# )\n",
    "\n",
    "pbmc[[\"percent.mt\"]] <- PercentageFeatureSet(pbmc, pattern = \"^MT-\")\n",
    "head(pbmc[[]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "promotional-atlanta",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nD+5pNceYzLFZAAAAAElFTkSuQmCC",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 420,
       "width": 420
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# recurrent of  VlnPlot\n",
    "# VlnPlot(pbmc, features = c(\"nFeature_RNA\", \"nCount_RNA\", \"percent.mt\"), ncol = 3)\n",
    "#nCount_RNA \n",
    "nCount_RNA_plot <- pbmc[['nCount_RNA']] %>%\n",
    "                        mutate(Identity='pbmc3k') %>%\n",
    "                        ggplot(aes(x=Identity,y=nCount_RNA)) + \n",
    "                            geom_violin(fill='pink') +\n",
    "                            geom_point(position='jitter',size=0.8) +\n",
    "                            theme_bw()\n",
    "\n",
    "# nfeature_RNA                        \n",
    "nfeature_RNA_plot <- pbmc[['nFeature_RNA']] %>%\n",
    "                        mutate(Identity='pbmc3k') %>%\n",
    "                        ggplot(aes(x=Identity,y=nFeature_RNA)) + \n",
    "                            geom_violin(fill='pink') +\n",
    "                            geom_point(position='jitter',size=0.8) +\n",
    "                            theme_bw()\n",
    "#percent.mt\n",
    "percent.mt_plot <- pbmc[['percent.mt']] %>%\n",
    "                        mutate(Identity='pbmc3k') %>%\n",
    "                        ggplot(aes(x=Identity,y=percent.mt)) + \n",
    "                            geom_violin(fill='pink') +\n",
    "                            geom_point(position='jitter',size=0.8) +\n",
    "                            theme_bw()\n",
    "\n",
    "## grid.arrange or ggarrange can lay out multiple plots on a page\n",
    "\n",
    "# grid.arrange(nCount_RNA_plot,nfeature_RNA_plot,percent.mt_plot,ncol=3,nrow=1)\n",
    "fig <- ggarrange(nCount_RNA_plot,nfeature_RNA_plot,percent.mt_plot,ncol=3,nrow=1)\n",
    "\n",
    "# png(filename='seurat_qc_violin.png',width=12,height=10,units='cm',res=100)\n",
    "fig\n",
    "# dev.off()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "4.0.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
